home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / CC_C / H156.ZIP / README.TXT < prev    next >
Text File  |  1992-07-16  |  84KB  |  2,407 lines

  1.  
  2.                             GNE C/C++ UTILITIES
  3.  
  4.                                 Version 1.0
  5.  
  6.                     Copyright (c) 1992 G.N.E. SOFTWARE LTD.
  7.  
  8.  
  9. This is a shareware copy of the utilities, which you may use to evaluate its 
  10. suitability for your needs. If you decide that the utilities are of use
  11. to you, then you must register to continue using them.
  12.  
  13. In order to encourage registration the shareware copy of the utilities
  14. are resticted to processing source files of up to 500 lines long. They will
  15. not correctly process source files longer than this.
  16.  
  17. Registration provides the following benefits:
  18.  
  19. o    Latest version of the utilities with support for unlimited length
  20.     source files.
  21. o    Printed version of the full manual.
  22. o    Technical support.
  23.  
  24. See the file REGISTER.TXT for details on how to register.
  25.  
  26.  
  27. G.N.E. SOFTWARE LTD. accept no responsiblity or liability for any loss or 
  28. damage arising from the use or misuse of this software.
  29.  
  30. All Company names and product names are registered trademarks or trademarks
  31. of their respective companies.
  32.  
  33.  
  34.                            GNE C/C++ UTILITIES
  35.  
  36.  
  37.    1       Introduction
  38.  
  39.            GNE C/C++ UTILITIES is a collection of 7 tools aimed at making
  40.            C/C++ software development more efficient.
  41.  
  42.            The following utilities are provided:
  43.  
  44.            CB              Reformats source code to your chosen layout
  45.                            style, thereby making it easier for you to read.
  46.  
  47.            CCALLS          Shows the function call tree. Also shows non-
  48.                            called functions and possible candidates for
  49.                            making static.
  50.  
  51.            CDEF            Performs a partial pre-processor pass to remove
  52.                            old or redundant code within #if, #ifdef and
  53.                            #ifndef statements for specified defines, making
  54.                            the code easier to read.
  55.  
  56.            CDOC            Allows documentation to be produced by extracting
  57.                            specially marked comment blocks from the source
  58.                            code, making it easier to produce the
  59.                            documentation in the first place and to maintain
  60.                            it.
  61.  
  62.            CPROTO          Generates function prototypes as required by ANSI
  63.                            compliant compilers. The prototypes include the
  64.                            same data types as used by the function as
  65.                            opposed to the base types that they may be
  66.                            defined from.
  67.  
  68.            CPR             Source printer which has knowledge about the
  69.                            C/C++ language which allows it to highlight
  70.                            function names, produce index of function names
  71.                            and start each function on a new page all of
  72.                            which help to make it easier to find your way
  73.                            through large source listings. Double sided
  74.                            printing is supported and it is also possible to
  75.                            print multiple pages on each side of the paper.
  76.  
  77.            FINDDIV         Finds all occurrences of possible / and %
  78.                            operations. Suitable for making sure that divide
  79.                            by zero errors can't occur, or for tracking them
  80.                            down when they do occur.
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.                                    -1-
  97.  
  98.  
  99.                
  100.                            GNE C/C++ UTILITIES
  101.  
  102.  
  103.    2       Installation
  104.  
  105.            The easiest way to install the utilities is by running the SETUP
  106.            program provided with the utilities which will copy the utilities
  107.            to your hard disk and perform any necessary modifications of your
  108.            AUTOEXEC.BAT file. As an alternative the utilities may be
  109.            installed manually.
  110.  
  111.            Before installation you will need to know the following:
  112.  
  113.            o       The drive you are installing from.
  114.  
  115.            o       The drive and directory where you wish to install the
  116.                    utilities. This may be either an existing directory or a
  117.                    new directory to be created. If you have installed a
  118.                    previous version of the utilities, then you should use
  119.                    the same directory, unless you wish to keep the old
  120.                    version. Note that the SETUP program will not over-write
  121.                    any of your existing macro files.
  122.  
  123.            o       The type of printer you will be using with the utilities.
  124.  
  125.  
  126.    2.1     System Requirements
  127.  
  128.            To install and run the utilities you will require a PC with the
  129.            following:
  130.  
  131.            o       Any 8086 compatible processor.
  132.  
  133.            o       256K free RAM.
  134.  
  135.            o       Hard disk with 300K free for the installation of the
  136.                    utilities.
  137.  
  138.            o       MS-DOS version 3.0 or later, or a compatible Operating
  139.                    System.
  140.  
  141.            o       A floppy disk drive suitable for the supplied media.
  142.  
  143.            o       A printer for use with CPR and CDOC.
  144.  
  145.            The following Printer types are supported:
  146.  
  147.            o       PostScript - This is the preferred printer type as it
  148.                    supports scaleable fonts.
  149.  
  150.            o       LaserJet - Any LaserJet II compatible printer.
  151.  
  152.            o       Epson compatible dot matrix printer.
  153.  
  154.            o       ASCII - This is any printer which doesn't fall into the
  155.                    above categories. This is the least desirable option as
  156.                    only the printers default font size will be available and
  157.                    no highlighting will be possible.
  158.  
  159.  
  160.  
  161.  
  162.                                    -2-
  163.  
  164.  
  165.                
  166.                            GNE C/C++ UTILITIES
  167.  
  168.  
  169.  
  170.    2.2     Standard Installation
  171.  
  172.            This is the recommended and simplest installation method. The
  173.            following steps assume that you are installing from the A: drive.
  174.            If you are installing from B: or any other drive/directory, then
  175.            use that drive/directory in place of A:
  176.  
  177.            Insert the floppy disk into the drive and enter:
  178.  
  179.                A:\SETUP
  180.  
  181.            You will now need to fill in four input fields. If you wish to
  182.            change the supplied default or if you make a mistake, use the
  183.            <backspace> key. To move to the next field you can either use the
  184.            <return> or <tab> key. Installation may be aborted at this stage
  185.            by pressing the <Esc> key. The fields are:
  186.  
  187.            o       'Copy from': This is the drive and directory that you are
  188.                    installing from. This is validated to make sure that it
  189.                    does contain the utilities.
  190.  
  191.            o       'Copy to': This is the drive and directory that you will
  192.                    be installing the utilities in. If this directory doesn't
  193.                    exist you will be asked for confirmation before it is
  194.                    created.
  195.  
  196.            o       'Default printer': Enter 'P' for PostScript, 'L' for
  197.                    LaserJet, 'E' for Epson or 'A' for a plain ASCII printer.
  198.                    If you use more than one type of printer, specify the one
  199.                    you use most often.
  200.  
  201.            o       'Modify autoexec.bat': If you answer 'Y' for yes then
  202.                    your autoexec.bat file will be modified by the setup
  203.                    program. Your old AUTOEXEC.BAT file will be renamed
  204.                    before modification to AUTOEXEC.GNE. If you answer 'N'
  205.                    for no you will be informed at the end of the
  206.                    installation of any changes that need to be made to your
  207.                    AUTOEXEC.BAT file before running the utilities.
  208.  
  209.            When you have entered all of these fields you will be asked for
  210.            confirmation before continuing. If you answer 'N' for no, you can
  211.            edit the four fields again. If you answer 'Y' for yes then the
  212.            installation procedure will start copying the files.
  213.  
  214.            When the installation is complete you will be informed if it is
  215.            necessary to reboot the computer.
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.                                    -3-
  229.  
  230.  
  231.                
  232.                            GNE C/C++ UTILITIES
  233.  
  234.  
  235.    2.3     Manual Installation
  236.  
  237.            This section is of interest to those who wish to have more
  238.            control over the setup process, or want to see the steps taken by
  239.            the SETUP program.
  240.  
  241.            For simplification we will assume that the source drive/directory
  242.            is A:\ and the destination drive/directory is C:\GNEUTILS.  The
  243.            following steps should be followed:
  244.  
  245.            o       Create the directory C:\GNEUTILS if it doesn't already
  246.                    exist.
  247.  
  248.            o       run the command:
  249.  
  250.                    COPY A:\*.EXE C:\GNEUTILS
  251.  
  252.                    You may delete C:\GNEUTILS\SETUP.EXE as it is not needed
  253.                    once the utilities are installed.
  254.  
  255.            o       For each of the following files: CB.MAC, CCALLS.MAC,
  256.                    CDEF.MAC, CPROTO.MAC and FINDDIV.MAC which don't already
  257.                    exist in C:\GNEUTILS, copy them from A:\ to C:\GNEUTILS.
  258.  
  259.            o       For each of the files: CDOC.MAC and CPR.MAC which don't
  260.                    already exist in C:\GNEUTILS, copy them from one of the
  261.                    following directories: A:\POSTSCPT, A:\LASERJET, A:\EPSON
  262.                    or A:\ASCII (depending on your printer) to C:\GNEUTILS.
  263.  
  264.            o       In your AUTOEXEC.BAT file ensure that C:\GNEUTILS is
  265.                    included in your PATH.
  266.  
  267.            o       In your AUTOEXEC.BAT file make sure the following line
  268.                    exists:
  269.  
  270.                    SET GNEUTILS=C:\GNEUTILS
  271.  
  272.                    This is necessary to pick up the macro files from the
  273.                    correct place.
  274.  
  275.            o       If you modified your AUTOEXEC.BAT file then reboot the
  276.                    computer.
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.                                    -4-
  295.  
  296.  
  297.                
  298.                            GNE C/C++ UTILITIES
  299.  
  300.  
  301.    3       Common Features
  302.  
  303.            This chapter describes features that are common to one or more of
  304.            the utilities.
  305.  
  306.            The following conventions are used in this chapter and the next
  307.            when describing the switches:
  308.  
  309.            [   ]   Anything within square brackets is optional.
  310.  
  311.            <   >   Used to represent something that must be specified. Eg.
  312.                    <num> would represent a number.
  313.  
  314.            |       Either what comes before the |, or what comes after it
  315.                    should be specified, but not both.
  316.  
  317.  
  318.    3.1     Command Line Arguments
  319.  
  320.            Each utility accepts three different types of arguments; These
  321.            are the filenames you want processed, switches which control the
  322.            way that the command works and macros which allow groups of
  323.            switches to be selected by specifying a single name.
  324.  
  325.  
  326.    3.1.1   Filenames
  327.  
  328.            Each utility accepts multiple filenames, and the filenames may
  329.            include wildcard characters. The wildcard characters which are
  330.            supported are '*' and '?'.
  331.  
  332.  
  333.    3.1.2   Switches
  334.  
  335.            Switches control the way a command works.  A switch consists of
  336.            either a '/' or a '-' followed by the switch letter which is case
  337.            significant, and depending on the particular switch an argument
  338.            for the switch may follow without any intervening spaces. The
  339.            positioning of switches on the command line is unimportant, ie.
  340.            they may appear before or after the filenames, as all of the
  341.            switches are processed before the filenames are processed.
  342.  
  343.  
  344.    3.1.3   Macros
  345.  
  346.            As some of the utilities take a large number of switches which
  347.            you may need to use quite frequently, you may define macros to
  348.            represent commonly used groups of switches.
  349.  
  350.            Each utility has its own macro file which may be found in the
  351.            directory specified by the "GNEUTILS" environment variable, and
  352.            will have the same name as the utility but with a ".MAC"
  353.            extension.
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.                                    -5-
  361.  
  362.  
  363.                
  364.                            GNE C/C++ UTILITIES
  365.  
  366.  
  367.            The macro file is a plain ASCII file which may be edited with any
  368.            text editor. It consists of multiple sections, where each section
  369.            defines a single macro.  Each section starts with a "+" followed
  370.            by an alphanumeric name (no intervening spaces), which is the
  371.            name of the macro being defined. This is then followed by the
  372.            switches you want this macro to represent. The macro name and
  373.            each of the switches must be separated by white space from each
  374.            other.
  375.  
  376.            Eg.  If the macro file CPR.MAC contained the following:
  377.  
  378.            +std /pp /l80 /c96 /Olpt1
  379.  
  380.            This would define the macro "std" to represent the 4 switches
  381.            following it when used with CPR. Comments may be included within
  382.            the macro file by preceding them with a '#'. Anything to the
  383.            right of the '#' up to the end of the line will be considered to
  384.            be a comment.
  385.  
  386.            To use a macro on the command line you simply precede it with a
  387.            '+'. Eg. to use the above defined macro for CPR you would use:
  388.  
  389.            cpr +std  [files...]
  390.  
  391.            You may mix multiple macros and switches together on the command
  392.            line.
  393.  
  394.            In the macro file, the very first macro defined is called the
  395.            default macro. If you do not specify any macros on the command
  396.            line, you will automatically get the default macro. If you do not
  397.            wish to use any macros and you don't require the default macro
  398.            then specify '+'  followed by white space on the command line.
  399.            Eg:
  400.  
  401.            cpr + /pe /l66 /c80
  402.  
  403.            prevents the default macro being used. Note that if you specify
  404.            any macros on the command line, then you will not get the default
  405.            macro.
  406.  
  407.            All of the utilities are supplied with macros, which may be
  408.            tailored to your own requirements. The default macro in each case
  409.            has been left empty (apart from the verbose switch, and the
  410.            printer selection).
  411.  
  412.  
  413.    3.2     Printing
  414.  
  415.            Both CPR the source printer and CDOC the source documentor,
  416.            produce output which is suitable for being sent direct to a
  417.            printer. As there are a large number of switches which are common
  418.            to both of these utilities they are described here.  These
  419.            switches allow specification of the type of printer in use, the
  420.            physical paper size, margins, headers and footers. Support is
  421.            also provided for double sided printing which can be very
  422.            convenient for large listings.
  423.  
  424.  
  425.  
  426.                                    -6-
  427.  
  428.  
  429.                
  430.                            GNE C/C++ UTILITIES
  431.  
  432.  
  433.  
  434.  
  435.    3.2.1   Page size
  436.  
  437.            This is the logical page size, ie. the number of lines and
  438.            columns you wish to use on the page, rather than the physical
  439.            page size which is the physical dimensions of the paper. On a
  440.            printer with scaleable fonts (or multiple bitmapped fonts) there
  441.            need not be a direct relationship between the logical page size
  442.            and the physical page size.  The following two switches control
  443.            the logical page size:
  444.  
  445.            /c<num>         Sets the logical page width to be <num> columns.
  446.                            The maximum number of columns allowed is 256. The
  447.                            default value is 80.
  448.  
  449.            /l<num>         Sets the logical page length to be <num> lines.
  450.                            The maximum number of lines allowed is 128.  The
  451.                            default value is 66.
  452.  
  453.            Within the logical page area you can specify the printable area,
  454.            which may be smaller than the logical page size to allow for
  455.            margins. The following four switches control the printable area:
  456.  
  457.            /u<num>         Specifies the number of columns available for
  458.                            printing in. This will be smaller than the number
  459.                            of columns specified with the /c option if you
  460.                            wish to have a left or right margin.  The default
  461.                            value is 80.
  462.  
  463.            /m<num>         Specifies the left hand margin size in columns.
  464.                            The default value is 0.
  465.  
  466.            /H<num>         Specifies the number of header lines.  The
  467.            default value is 0.
  468.  
  469.            /F<num>         Specifies the number of footer lines.  The
  470.            default value is 0.
  471.  
  472.             Note that the right hand margin size is the columns in the
  473.            logical page minus the sum of the printable columns and the left
  474.            hand margin size.
  475.  
  476.            When only one of /u and /c is specified, the other is
  477.            automatically calculated using the formulae:  /c = /u + /m.
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.  
  489.  
  490.  
  491.  
  492.                                    -7-
  493.  
  494.  
  495.                
  496.                            GNE C/C++ UTILITIES
  497.  
  498.  
  499.    3.2.2   Headers and Footers
  500.  
  501.            The size and contents of the header and footer is user definable.
  502.            Each may consist of up to 9 lines. The headers and footers are
  503.            specified with the following switches:
  504.  
  505.            /H<num>[str]    Specifies the string for the given header line
  506.                            which may be in the range 1 (for the top line) to
  507.                            9. If no string is specified then this header
  508.                            line is left blank.
  509.  
  510.            /F<num>[str]    Specifies the string for the given footer line
  511.                            which may be in the range 1 (for the top footer
  512.                            line) to 9. If no string is specified then this
  513.                            footer line is left blank.
  514.  
  515.            The total number of header lines is the maximum line number
  516.            specified in a /H switch. All heading lines up to this line which
  517.            have not been specified in a /H switch are left blank. Eg. For 5
  518.            heading lines, all of which are blank except the middle one which
  519.            has the string "HEADING" you would use the following switches:
  520.  
  521.            /H3STRING /H5
  522.  
  523.            The same applies to the footer lines.
  524.  
  525.            The strings specified in the heading and footer line switches may
  526.            consist of up to three sections with each separated with a '~'.
  527.            The first section is displayed left justified, the second section
  528.            is displayed centre justified and the third section is displayed
  529.            right justified.
  530.  
  531.            Each section may contain any ASCII text or keywords.  Keywords
  532.            are names enclosed within '{' and '}', which will be substituted
  533.            by the current value of the keyword when the header/footer is
  534.            printed. The following keywords are available:
  535.  
  536.            {File}          The name of the file currently being printed.
  537.                            This is left blank if the standard input is being
  538.                            used. This is only applicable to CPR.
  539.  
  540.            {FPage}         The page number within the file being printed.
  541.                            This is only applicable to CPR.
  542.  
  543.            {FDate}         The last modification date/time of the file being
  544.                            printed.  This is only applicable to CPR.
  545.  
  546.            {Page}          The current page number.  If printing two or more
  547.                            pages on a single sheet of paper, then these are
  548.                            considered to be separate pages.
  549.  
  550.            {Sheet}         The current sheet number. This is irrespective of
  551.                            the number of pages printed on each sheet.
  552.  
  553.            {Date}          The current date/time.
  554.  
  555.  
  556.  
  557.  
  558.                                    -8-
  559.  
  560.  
  561.                
  562.                            GNE C/C++ UTILITIES
  563.  
  564.  
  565.            {Kwd}           The CDOC keyword for the current comment block.
  566.                            This is only applicable to CDOC.
  567.  
  568.            {_}             Fill the line with the underbar character. This
  569.                            is suitable for drawing horizontal lines.
  570.  
  571.            If you wish to use the '{' character or the '\' character within
  572.            the string, then it must be escaped by preceding it with a '\'
  573.            character. If you wish to include spaces in the string then you
  574.            must put the string in double quotes.
  575.  
  576.            Eg. To print 3 heading lines with the middle one containing the
  577.            string "Middle heading line" centre justified, and two footer
  578.            lines, the top one containing a line of underbar characters, and
  579.            the bottom one containing the file name left justified, and the
  580.            page within the file right justified, the following switches
  581.            would be used:
  582.  
  583.            /H3 /H2"~Middle heading line"
  584.            /F1{_} /F2{File}~~{FPage}
  585.  
  586.    3.2.3   PostScript printers
  587.  
  588.            The following switch should be used when using a PostScript
  589.            printer:
  590.  
  591.            /pp             Produce output suitable for a PostScript printer.
  592.  
  593.            The following two switches control the size of the physical page
  594.            in 1/72".
  595.  
  596.            /X<num>         Width of page.
  597.  
  598.            /Y<num>         Height of page.
  599.  
  600.            The default is a width of 594 and a height of 840, which is the
  601.            size of an A4 sheet. Note that the width and height refer to the
  602.            physical page and are independent of whether printing is being
  603.            done in portrait or landscape mode.
  604.  
  605.            As most laser printers can't print to the extreme edge of the
  606.            paper a margin is specified around the edges of the page.
  607.            Printing will not be attempted in this margin. The margin size
  608.            can be set in multiples of 1/72" with the following switch:
  609.  
  610.            /M<num>         Page margin size (applies to left, right, top and
  611.            bottom).
  612.  
  613.            The default page margin size is set to 25 which should be
  614.            suitable for most laser printers. If you find that you are
  615.            loosing text at the extreme edges of the paper, then you will
  616.            have to increase the margin size with this switch.
  617.  
  618.            When printing, the text will be scaled so that the area occupied
  619.            by the lines and columns specified with the /l and /c switches,
  620.            will be the page size minus the page margins.
  621.  
  622.  
  623.  
  624.                                    -9-
  625.  
  626.  
  627.                
  628.                            GNE C/C++ UTILITIES
  629.  
  630.  
  631.  
  632.    3.2.4   LaserJet printers
  633.  
  634.            The following switch should be used when using a LaserJet
  635.            printer:
  636.  
  637.            /pl             Produce output suitable for a LaserJet printer.
  638.  
  639.            The printable area on the physical page my be specified by the
  640.            following two switches:
  641.  
  642.            /X<num>         Width of the printable area in 1/72" starting
  643.                            from the origin.
  644.  
  645.            /Y<num>         Height of the printable area in 1/72" starting
  646.                            from the origin.
  647.  
  648.            Note that unlike the PostScript switches which specify the size
  649.            of the physical page, these specify the printable area in the
  650.            physical page. There is no /M switch. The width and height also
  651.            depend on whether the page is being printed in portrait or
  652.            landscape mode. Refer to your printer reference manual for more
  653.            details.
  654.  
  655.            In portrait mode the default width is 561, and the default height
  656.            is 769. In landscape mode the default width is 813 and the
  657.            default height is 523. Both of these correspond to an A4 sheet.
  658.  
  659.            Note that unless you have a printer that supports the PCL5
  660.            emulation and a scaleable fixed space font, you will have to make
  661.            do with the bitmapped font sizes supported by your printer. This
  662.            means you will need to adjust the lines and columns on the page
  663.            to fill the page as much as possible. In addition you may find
  664.            that it is not possible to display text in bold typeface with all
  665.            of these fonts.
  666.  
  667.            If you specified a LaserJet compatible printer when installing
  668.            the utilities you will find that the macro file for CPR contains
  669.            appropriate line and column sizes suitable for the most commonly
  670.            supported font sizes.
  671.  
  672.    3.2.5   Epson  printers
  673.  
  674.            The following switch should be used when using an Epson
  675.            compatible printer:
  676.  
  677.            /pe             Produce output suitable for an Epson  compatible
  678.                            printer.
  679.  
  680.            The printable area on the physical page my be specified by the
  681.            following two switches:
  682.  
  683.            /X<num>         Width of the printable area in 1/72".
  684.  
  685.            /Y<num>         Height of the printable area in 1/72".
  686.  
  687.  
  688.  
  689.  
  690.                                    -10-
  691.  
  692.  
  693.                
  694.                            GNE C/C++ UTILITIES
  695.  
  696.  
  697.            Note that unlike the PostScript switches which specify the size
  698.            of the physical page, these specify the printable area in the
  699.            logical page. There is no /M switch.
  700.  
  701.            The default width is 576, and the default height is 792. This
  702.            corresponds to the size of a 11" x 91/2" sheet of tractor fed
  703.            paper with a printable width of 8".
  704.  
  705.            Note that Landscape mode is not supported and only four different
  706.            font widths (10, 12, 17 and 20 CPI)  are supported.  Line spacing
  707.            may be at either 6 lines per inch or 8 lines per inch.
  708.  
  709.            If you specified an Epson compatible printer when installing
  710.            these utilities you will find that the macro file for CPR
  711.            contains appropriate line and column sizes suitable for these
  712.            font sizes.
  713.  
  714.    3.2.6   ASCII printers
  715.  
  716.            The following switch should be used if your printer does not
  717.            support any of the previous emulations:
  718.  
  719.            /pa             Produce output in plain ASCII text.
  720.  
  721.            Note that both LaserJet and Epson compatible printers could be
  722.            driven with this option, but you would loose control over the
  723.            font size and it will not be possible to print in bold.
  724.  
  725.            These is no need to set the physical page size or page margin, so
  726.            the /X, /Y and /M switches are all ignored, but you will need to
  727.            make sure that the number of lines and columns specified with the
  728.            /l and /c switches correspond to a full page for the printer when
  729.            used with its default font.
  730.  
  731.    3.2.7   Double sided printing
  732.  
  733.            Double sided printing is available regardless of the printer in
  734.            use and allows (with manual intervention) paper to be printed on
  735.            both sides. This is achieved by running the utility twice, once
  736.            with the /o switch which will print the odd sheets only, and once
  737.            with the /e switch which will print the even sheets only, with
  738.            the paper being re-inserted into the printer before the utility
  739.            is run for the second time.
  740.  
  741.            You will need to determine the correct orientation in which to
  742.            re-insert the paper into your printer by either referring to your
  743.            printers reference manual, or by experimentation.
  744.  
  745.  
  746.  
  747.  
  748.  
  749.  
  750.  
  751.  
  752.  
  753.  
  754.  
  755.  
  756.                                    -11-
  757.  
  758.  
  759.                
  760.                            GNE C/C++ UTILITIES
  761.  
  762.  
  763.            You will also want to ensure that the output is correctly
  764.            ordered. Once you know the path that the paper takes through your
  765.            printer this should be possible without having to manually re-
  766.            order the pages. There are two ways you can control the ordering
  767.            from the command line:
  768.  
  769.            o       Print the even pages before the odd pages, as this
  770.                    changes the final ordering of the pages.
  771.  
  772.            o       Use the /r switch which will print the pages in reverse
  773.                    order.
  774.  
  775.    3.3     Limitations
  776.  
  777.            The following limitations apply to source files:
  778.  
  779.            o       The maximum line length supported is 256 characters.
  780.  
  781.            o       Apart from CDEF,  the utilities do not perform any pre-
  782.                    processing. This implies that if you have re-defined any
  783.                    of the C/C++ keywords or any of the C/C++ operators then
  784.                    the results are likely to be unpredictable.
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798.  
  799.  
  800.  
  801.  
  802.  
  803.  
  804.  
  805.  
  806.  
  807.  
  808.  
  809.  
  810.  
  811.  
  812.  
  813.  
  814.  
  815.  
  816.  
  817.  
  818.  
  819.  
  820.  
  821.  
  822.                                    -12-
  823.  
  824.  
  825.                
  826.                            GNE C/C++ UTILITIES
  827.  
  828.  
  829.    4       Command Reference
  830.  
  831.            Syntax for all of the commands is similar. It takes the form:
  832.  
  833.                        command [switches and macros] [files...]
  834.  
  835.            Where command is one of  'cb', 'ccalls', 'cdef', 'cdoc',
  836.            'cproto', 'cpr' and 'finddiv'.
  837.  
  838.            If files are specified the source is read from these, otherwise
  839.            the standard input is read. The output is always sent to the
  840.            standard output, except for cdoc and cpr where it may optionally
  841.            be sent to a file or a device.
  842.  
  843.            The following two switches are available for use with all of the
  844.            utilities:
  845.  
  846.            /?              Gives online help regarding the use of the
  847.                            utility.
  848.  
  849.            /v              Sets verbose mode. When this mode is set the
  850.                            utilities report their progress as they process
  851.                            each file in the file list.
  852.  
  853.            None of the utilities directly modify the original file. If you
  854.            wish to change the original file, say TEST.C with say CB,  you
  855.            would need to run the following commands:
  856.  
  857.                    RENAME TEST.C TEST.OLD
  858.                    CB TEST.OLD > TEST.C
  859.  
  860.            Before deleting TEST.OLD you should make sure that TEST.C is
  861.            correct.
  862.  
  863.  
  864.  
  865.  
  866.  
  867.  
  868.  
  869.  
  870.  
  871.  
  872.  
  873.  
  874.  
  875.  
  876.  
  877.  
  878.  
  879.  
  880.  
  881.  
  882.  
  883.  
  884.  
  885.  
  886.  
  887.  
  888.                                    -13-
  889.  
  890.  
  891.                
  892.                            GNE C/C++ UTILITIES
  893.  
  894.  
  895.    4.1     CB  -  Source Reformatter
  896.  
  897.            CB allows the indentation style and other layout characteristics
  898.            of source code to be changed. The required characteristics of the
  899.            indentation and layout is specified by switches.
  900.  
  901.            CB is suitable for converting code written by other people into
  902.            the style of layout you use, thereby making it easier to read. It
  903.            can also be used to ensure that the layout of code written within
  904.            a team or company all follows the same layout standards.
  905.  
  906.            Note that the layout of array and structure initialisation is not
  907.            changed, as the original authors layout for these is usually the
  908.            best.
  909.  
  910.  
  911.    4.1.1   Basic Switches
  912.  
  913.            /ik[num]        Reformat the source to use Kernighan & Ritchie
  914.                            style indenting. If [num] is specified then this
  915.                            will be used as the number of spaces to indent
  916.                            each level by.  If it is not specified, then a
  917.                            tab character will be used for each indentation
  918.                            level. The following is an example of Kernighan &
  919.                            Ritchie layout:
  920.  
  921.                            if (test) {
  922.                                    /* */
  923.                            }
  924.  
  925.            /ia[num]        Reformat the source to use Allman style
  926.                            indenting. If [num] is specified then this will
  927.                            be used as the number of spaces to indent each
  928.                            level by. If it is not specified, then a tab
  929.                            character will be used for each indentation
  930.                            level. The following is an example of Allman
  931.                            layout :
  932.  
  933.                            if (test)
  934.                            {
  935.                                    /* */
  936.                            }
  937.  
  938.            /iw[num]        Reformat the source to use Whitesmiths style
  939.                            indenting. If [num] is specified then this will
  940.                            be used as the number of spaces to indent each
  941.                            level by. If it is not specified, then a tab
  942.                            character will be used for each indentation
  943.                            level. The following is an example of Whitesmiths
  944.                            layout:
  945.  
  946.                            if (test)
  947.                                    {
  948.                                    /* */
  949.                                    }
  950.  
  951.  
  952.  
  953.  
  954.                                    -14-
  955.  
  956.  
  957.                
  958.                            GNE C/C++ UTILITIES
  959.  
  960.  
  961.            /f              Format the function definitions using the spacing
  962.                            specified with the /s switches. The default is to
  963.                            leave them unaltered.
  964.  
  965.            /c              If there are multiple trailing spaces in a
  966.                            comment then replace them with a single space.
  967.                            This is useful for source where all the comments
  968.                            end in the same column, but after changing the
  969.                            indentation the ends of the comments are no
  970.                            longer aligned.
  971.  
  972.            /c<num>         This will add trailing spaces to a comment to
  973.                            make the */ finish in the specified column, where
  974.                            possible.
  975.  
  976.            /t<num>         This specifies the tab size for the output
  977.                            source. It is used together with the /T option,
  978.                            to ensure that the indentation of the second and
  979.                            subsequent lines of multi-line statements
  980.                            relative to the first line of the statement is
  981.                            maintained. The default value is 8
  982.  
  983.            /T<num>         This specifies the tab size for the input source.
  984.                            It is used together with the /t option as
  985.                            discussed above. The default value is 8.
  986.  
  987.            /S              When displaying case statements, the case is
  988.                            indented within the switch.  The default is to
  989.                            display the case and the switch with the same
  990.                            indentation.
  991.  
  992.            /w              When displaying 'do { ... } while ( ... );'
  993.                            statements, put the 'while' on the same line as
  994.                            the '}'.  This helps the readability of the code,
  995.                            as it prevents the while part of the statement
  996.                            from looking like a while statement with an empty
  997.                            body.  Note that this is always the case when
  998.                            using Kernighan & Ritchie layout, but with Allman
  999.                            and Whitesmiths layout the '}' and the 'while'
  1000.                            will be put on different lines by default.
  1001.  
  1002.    4.1.2   Spacing Switches
  1003.  
  1004.            The following switches all control the spacing between particular
  1005.            tokens. Each switch takes a numeric parameter which may be either
  1006.            0 or 1. If 0 is used then there will be no space between the
  1007.            specified tokens. If 1 is used then there will be a single space
  1008.            between the specified tokens. If the switch is not used then the
  1009.            original spacing is maintained.
  1010.  
  1011.            /su<0|1>        Specifies the spacing between a unary operator
  1012.                            and its operand.
  1013.  
  1014.            /sb<0|1>        Specifies the spacing between a binary operator
  1015.                            and both of its operands.
  1016.  
  1017.  
  1018.  
  1019.  
  1020.                                    -15-
  1021.  
  1022.  
  1023.                
  1024.                            GNE C/C++ UTILITIES
  1025.  
  1026.  
  1027.            /sp<0|1>        Specifies the spacing on the inside of opening
  1028.                            and closing parenthesis.
  1029.  
  1030.            /sr<0|1>        Specifies the spacing between both structure
  1031.                            member operators ('.') and structure member
  1032.                            pointers ('->'), and their structures and
  1033.                            members.  When processing C++ source the spacing
  1034.                            around '::', '.*' and '->*' is also modified.
  1035.  
  1036.            /sR<0|1>        Specifies the spacing between 'return' and the
  1037.                            opening parenthesis.
  1038.  
  1039.            /sf<0|1>        Specifies the spacing between a function name
  1040.                            used in a function call and the opening
  1041.                            parenthesis.
  1042.  
  1043.            /st<0|1>        Specifies the spacing between 'for', 'if' or a
  1044.                            'while' and the opening parenthesis.
  1045.  
  1046.            /sc<0|1>        Specifies the spacing in front of  a ','.
  1047.  
  1048.            /sC<0|1>        Specifies the spacing after a ','.
  1049.  
  1050.            /se<0|1>        Specifies the spacing between the last token in a
  1051.                            statement and the statement terminator (';').
  1052.  
  1053.            /ss<0|1>        Specifies the spacing in front of the semi-colons
  1054.                            in a 'for' statement.
  1055.  
  1056.            /sS<0|1>        Specifies the spacing after the semi-colons in a
  1057.                            'for' statement.
  1058.  
  1059.  
  1060.    4.1.3   Examples
  1061.  
  1062.            To produce a layout similar to that used by K&R in "The C
  1063.            programming language" you would use the following:
  1064.  
  1065.            /ik5            The 'k' specifies the "K&R" indentation layout
  1066.                            and the 5 specifies the number of spaces to
  1067.                            indent each level by.
  1068.  
  1069.            /c              Remove multiple trailing spaces in comments and
  1070.                            replace with a single space.
  1071.  
  1072.            /su0            No space between unary operators and their
  1073.                            operands.
  1074.  
  1075.            /sb1            Single space between binary operators and both of
  1076.                            their operands.
  1077.  
  1078.            /sp0            No space on the inside of parenthesis.
  1079.  
  1080.            /sr0            No space either side of a '.' or a '->'.
  1081.  
  1082.            /sR0            No space between 'return' and '('.
  1083.  
  1084.  
  1085.  
  1086.                                    -16-
  1087.  
  1088.  
  1089.                
  1090.                            GNE C/C++ UTILITIES
  1091.  
  1092.  
  1093.  
  1094.            /sf0            No space between the function name and the '(' in
  1095.                            a function call.
  1096.  
  1097.            /st1            Single space between 'for', 'if' or 'while' and
  1098.                            '('.
  1099.  
  1100.            /sc0            No space in front of a ','.
  1101.  
  1102.            /sC1            Single space after a ','.
  1103.  
  1104.            /se0            No space in front of the ';' at the end of a
  1105.                            statement.
  1106.  
  1107.            /ss0            No space in front of a ';' used in a for
  1108.                            statement.
  1109.  
  1110.            /sS1            Single space used after a ';' in a for statement.
  1111.  
  1112.            /f              Apply the above /s switches to the function
  1113.                            definition as well.
  1114.  
  1115.            When you have decided on the switches appropriate to your layout
  1116.            style, you are advised to set up a macro for them, so you don't
  1117.            have to type in all of the switches every time you use the
  1118.            utility.  If you set up the default macro (the first macro in the
  1119.            macro file) then you will not need to specify any switches or
  1120.            macros on the command line (remember that the default macro is
  1121.            always used, unless you specify a '+' or another macro on the
  1122.            command line). So if you have a source file OLD.C and you wanted
  1123.            to produce a file NEW.C which conforms to your layout style, you
  1124.            would use:
  1125.  
  1126.                    CB OLD.C > NEW.C
  1127.  
  1128.            You should not delete the old file until you have checked that
  1129.            the new file is correct.
  1130.  
  1131.  
  1132.  
  1133.  
  1134.  
  1135.  
  1136.  
  1137.  
  1138.  
  1139.  
  1140.  
  1141.  
  1142.  
  1143.  
  1144.  
  1145.  
  1146.  
  1147.  
  1148.  
  1149.  
  1150.  
  1151.  
  1152.                                    -17-
  1153.  
  1154.  
  1155.                
  1156.                            GNE C/C++ UTILITIES
  1157.  
  1158.  
  1159.    4.2     CCALLS  -  Call Tree Display
  1160.  
  1161.            CCALLS can be used to show any of the following:
  1162.  
  1163.            o       The caller/called tree. This is shown by default unless
  1164.                    any of the /r, /s or /u switches are used. The
  1165.                    caller/called tree will show for a single function which
  1166.                    functions it call. Then for each of these functions, the
  1167.                    functions that they call are displayed, and so on. This
  1168.                    is suitable for viewing the overall structure of a
  1169.                    program.
  1170.  
  1171.            o       The called/caller tree. This is selected with the /r
  1172.                    switch. The called/caller tree will show for a single
  1173.                    function which functions call it. Then for each of these
  1174.                    functions, the functions that call them are displayed,
  1175.                    and so on. This is suitable for finding all possible call
  1176.                    paths to a single function.
  1177.  
  1178.            o       The functions that could be made static. This is selected
  1179.                    with the /s switch.
  1180.  
  1181.            o       The functions that are not called. This is selected with
  1182.                    the /u switch.
  1183.  
  1184.            For each function listed in the call tree, the file name and line
  1185.            number where it is defined is also printed.
  1186.  
  1187.            As CCALLS does not do any pre-processing, it can't tell the
  1188.            difference between a function call and a macro, so both are
  1189.            included in the call tree.  CCALLS is not suitable for use with
  1190.            C++ source as it will not show member functions.
  1191.  
  1192.  
  1193.    4.2.1   Basic Switches
  1194.  
  1195.            /r              Reverse the order of the tree, so that for a
  1196.                            particular function , all of the functions that
  1197.                            call it are shown. By default all of the
  1198.                            functions that it calls are shown.
  1199.  
  1200.            /e              Include in the tree those functions which are
  1201.                            called but not defined within the source files.
  1202.                            When these functions are included in the tree
  1203.                            they are marked as "external". By default
  1204.                            external functions are not shown.
  1205.  
  1206.            /f[func]        Start the tree with the specified function. By
  1207.                            default the starting function is "main". If the
  1208.                            /f switch is used without a function name then
  1209.                            CCALLS will attempt to show the call tree for all
  1210.                            functions that are not called themselves.
  1211.  
  1212.            /i              After the tree print an alphabetically sorted
  1213.                            index of which line each function first appears
  1214.                            on.
  1215.  
  1216.  
  1217.  
  1218.                                    -18-
  1219.  
  1220.  
  1221.                
  1222.                            GNE C/C++ UTILITIES
  1223.  
  1224.  
  1225.  
  1226.            /l<num>         Specifies the maximum depth of the tree to
  1227.                            display. A value of 0 would display just the
  1228.                            starting function, a value of 1 would display the
  1229.                            starting function and all those functions that it
  1230.                            calls (or is called by if /r is set), and so on.
  1231.                            By default there is no limit to the depth of the
  1232.                            tree.
  1233.  
  1234.            /t<num>         Specifies the indentation to use for each level
  1235.                            of the tree. The default is to use 4 characters
  1236.                            for each indentation level.
  1237.  
  1238.            /n              Precede each line with its line number. This is
  1239.                            useful as many of the lines will reference other
  1240.                            lines to avoid duplication within the tree.
  1241.  
  1242.  
  1243.    4.2.2   Special Switches
  1244.  
  1245.            The following two switches can't be used together or with the
  1246.            above switches. They do not display a tree, but show a list of
  1247.            functions that match a certain criteria.
  1248.  
  1249.            /s              This displays a list of all those functions that
  1250.                            are not called from functions in other files and
  1251.                            are not already defined as 'static'. It's purpose
  1252.                            is to locate those functions that could be made
  1253.                            static. Before making any of these functions
  1254.                            static you should make sure that they are not
  1255.                            called indirectly, ie. via a pointer to a
  1256.                            function or from a file that was not specified in
  1257.                            the command line arguments.
  1258.  
  1259.            /u              This displays a list of all those functions that
  1260.                            are not called from any of the other functions in
  1261.                            the files specified in the command line
  1262.                            arguments. Before deleting any of these functions
  1263.                            you should make sure that they are not called
  1264.                            indirectly, ie. via a pointer to a function or
  1265.                            from a file that was not specified in the command
  1266.                            line arguments.
  1267.  
  1268.  
  1269.    4.2.3   Advanced Switches
  1270.  
  1271.            The following switches control the size of internal tables. These
  1272.            have a default size which should be sufficient for most programs.
  1273.            The size of the tables may be increased at the cost of needing
  1274.            more memory.
  1275.  
  1276.            /C<num>         This specifies the maximum number of different
  1277.                            functions (including external functions) that are
  1278.                            called. The default value is 1024.
  1279.  
  1280.  
  1281.  
  1282.  
  1283.  
  1284.                                    -19-
  1285.  
  1286.  
  1287.                
  1288.                            GNE C/C++ UTILITIES
  1289.  
  1290.  
  1291.            /F<num>         This specifies the maximum number of function
  1292.                            definitions. The default value is 1024.
  1293.  
  1294.            /S<num>         This specifies the maximum number of strings to
  1295.                            store in the string table.  An entry is added to
  1296.                            the string table for each filename being
  1297.                            processed, for each function definition and for
  1298.                            each function called. The default value is 1024.
  1299.  
  1300.    4.2.4   Examples
  1301.  
  1302.            If the file TEST.C contains the following source code:
  1303.  
  1304.                    main(int argc, char *argv[])
  1305.                    {
  1306.                         int i;
  1307.  
  1308.                         if (argc < 2) {
  1309.                              ShowUsage();
  1310.                              exit(1);
  1311.                         }
  1312.  
  1313.                         for (i = 1; i <= argc; i++) {
  1314.                              PrintArg(i, argv[i]);
  1315.                         }
  1316.                    }
  1317.  
  1318.                    static void ShowUsage(void)
  1319.                    {
  1320.                         printf("Usage: test [args...]\n");
  1321.                    }
  1322.  
  1323.                    void PrintArg(int ArgNum, char *pArg)
  1324.                    {
  1325.                         printf("Arg %d = %s\n", ArgNum, pArg);
  1326.                    }
  1327.  
  1328.                    void TestArg(void)
  1329.                    {
  1330.                         PrintArg(1, "Test Arg");
  1331.                    }
  1332.  
  1333.            To show the caller/called tree, use:
  1334.  
  1335.            CCALLS TEST.C
  1336.  
  1337.            This will produce the following output:
  1338.  
  1339.                    main    [TEST.C,1]
  1340.                    |   ShowUsage    [TEST.C,15]
  1341.                    |   PrintArg    [TEST.C,20]
  1342.  
  1343.            If you wanted to show the caller/called tree with externals you
  1344.            would use:
  1345.  
  1346.                    CCALLS /e TEST.C
  1347.  
  1348.  
  1349.  
  1350.                                    -20-
  1351.  
  1352.  
  1353.                
  1354.                            GNE C/C++ UTILITIES
  1355.  
  1356.  
  1357.  
  1358.            This will produce the following output:
  1359.  
  1360.                    main    [TEST.C,1]
  1361.                    |   ShowUsage    [TEST.C,15]
  1362.                    |   |   printf    [External]
  1363.                    |   exit    [External]
  1364.                    |   PrintArg    [TEST.C,20]
  1365.                    |   |   printf    [External]
  1366.  
  1367.            To show all possible ways that printf() could be called, use:
  1368.  
  1369.                    CCALLS /r /fprintf TEST.C
  1370.  
  1371.            This will produce the following output:
  1372.  
  1373.                    printf    [External]
  1374.                    |   ShowUsage    [TEST.C,15]
  1375.                    |   |   main    [TEST.C,1]
  1376.                    |   PrintArg    [TEST.C,20]
  1377.                    |   |   main    [TEST.C,1]
  1378.                    |   |   TestArg    [TEST.C,25]
  1379.  
  1380.            To show all functions that could be made static use:
  1381.  
  1382.            CCALLS /s TEST.C
  1383.  
  1384.            This would produce the following output:
  1385.  
  1386.                    main    [TEST.C,1]
  1387.                    PrintArg    [TEST.C,20]
  1388.                    TestArg    [TEST.C,25]
  1389.  
  1390.            Note that main() function is included in this list because it is
  1391.            not called from any of the functions that CCALLS processed, but
  1392.            is called by the C start up code, so it can't be made static.
  1393.  
  1394.            To show all functions that are not called, use:
  1395.  
  1396.                    CCALLS /u TEST.C
  1397.  
  1398.            This will produce the following output:
  1399.  
  1400.                    main    [TEST.C,1]
  1401.                    TestArg    [TEST.C,25]
  1402.  
  1403.            Note that main() function is included in this list because it is
  1404.            not called from any of the functions that CCALLS processed, but
  1405.            is called by the C start up code, so it can't be deleted.
  1406.  
  1407.  
  1408.  
  1409.  
  1410.  
  1411.  
  1412.  
  1413.  
  1414.  
  1415.  
  1416.                                    -21-
  1417.  
  1418.  
  1419.                
  1420.                            GNE C/C++ UTILITIES
  1421.  
  1422.  
  1423.    4.3     CDEF  -  #ifdef Remover
  1424.  
  1425.            If source code supports conditional compilation (code within #if,
  1426.            #ifdef and #ifndef statements), it can at times be difficult to
  1427.            read easily, especially if there are a large number of
  1428.            conditional statements or they are nested. CDEF allows you to
  1429.            remove conditional compilation on a per identifier basis. Eg. if
  1430.            code uses both 'TEST' and 'DEBUG' for conditional compilation
  1431.            then it is possible to remove the conditional compilation for
  1432.            either 'TEST' or 'DEBUG' singly, or for both.
  1433.  
  1434.    4.3.1   Switches
  1435.  
  1436.            /D<symbol>[=value]      Treat the symbol as being defined. If the
  1437.                            value is specified then it is set to that value.
  1438.  
  1439.            /U<symbol>      Treat the symbol as being undefined.
  1440.  
  1441.    4.3.2   Examples
  1442.  
  1443.            If you have a lot of "#ifdef DEBUG" statements in your code which
  1444.            are no longer needed and are now hindering readability use the
  1445.            following switch:
  1446.  
  1447.            /UDEBUG
  1448.  
  1449.            This would convert code fragments which looked like:
  1450.  
  1451.                    #ifdef DEBUG
  1452.                         printf("Debugging version\n");
  1453.                    #else
  1454.                         printf("Production version\n");
  1455.                    #endif
  1456.  
  1457.            to:
  1458.  
  1459.                         printf("Production version\n");
  1460.  
  1461.            Alternatively if you used the switch:
  1462.  
  1463.            /DDEBUG
  1464.  
  1465.            The above code fragment would be converted to:
  1466.  
  1467.                         printf("Debugging version\n");
  1468.  
  1469.            Remember that the output of CDEF could be piped directly into CPR
  1470.            to print the file after removing the conditional compilation,
  1471.            without the need to change the original or to create temporary
  1472.            versions of the file.
  1473.  
  1474.  
  1475.  
  1476.  
  1477.  
  1478.  
  1479.  
  1480.  
  1481.  
  1482.                                    -22-
  1483.  
  1484.  
  1485.                
  1486.                            GNE C/C++ UTILITIES
  1487.  
  1488.  
  1489.    4.4     CDOC  -  Code Documentor
  1490.  
  1491.            CDOC provides an easy method to document functions/data
  1492.            structures etc. within a library or program, by extracting
  1493.            specially marked comment blocks which can then be sorted into
  1494.            alphabetical order before printing.
  1495.  
  1496.            A comment block may be a single comment, or multiple contiguous
  1497.            comments (only separated by white space) if the /j switch is
  1498.            used. The comment block must also have a single alphabetic
  1499.            character immediately after the start of the comment, ie. no
  1500.            spaces are allowed between the '//' or '/*' and the alphabetic
  1501.            character. The case of this character is not significant. This
  1502.            character is used as an identifier for different types of comment
  1503.            blocks. For example you may use the letter 'F' to identify all
  1504.            comment blocks that document functions, and the letter 'D' to
  1505.            identify all comment blocks that document data structures. Using
  1506.            the /d switch you can then choose which comment blocks you are
  1507.            interested in.
  1508.  
  1509.            A comment block may optionally have a keyword associated with it.
  1510.            If used this keyword can be used for sorting the comment blocks
  1511.            into alphabetical order on the keyword, for use in the headers
  1512.            and footers and also for producing indexes. The keyword may
  1513.            appear any where inside the comment block, but must be preceded
  1514.            by a '%'. When the comment block is printed the '%' is replaced
  1515.            with a space and the keyword appears in bold if your printer
  1516.            supports bold highlighting.
  1517.  
  1518.            It is possible to make other words in a comment block appear in
  1519.            bold be inserting '$b' in front of them.
  1520.  
  1521.    4.4.1   Basic Switches
  1522.  
  1523.            /p<a|e|l|p>     Sets the printer type. Set to one of the
  1524.                            following:
  1525.                            /pa - ASCII output
  1526.                            /pe - output suitable for an Epson printer.
  1527.                            /pl - output suitable for a LaserJet printer.
  1528.                            /pp - output suitable for a PostScript printer.
  1529.  
  1530.            /l<num>         Sets <num> lines to use on the sheet of paper.
  1531.                            This is the total number of lines including
  1532.                            header and footer lines.
  1533.  
  1534.            /c<num>         Sets <num> columns across the sheet of paper to
  1535.                            use.  This is the total number of columns
  1536.                            including left and right hand margins.
  1537.  
  1538.            /m[o|e]<num>    Sets the left hand margin to be <num> columns. If
  1539.                            /mo is used then the margin is set for odd
  1540.                            numbered pages only. If /me is used then the
  1541.                            margin is set for even numbered pages only.
  1542.  
  1543.  
  1544.  
  1545.  
  1546.  
  1547.  
  1548.                                    -23-
  1549.  
  1550.  
  1551.                
  1552.                            GNE C/C++ UTILITIES
  1553.  
  1554.  
  1555.            /u<num>         Sets the number of columns that data may be
  1556.                            printed in. This value plus the left hand margin
  1557.                            size must be less than or equal to the total
  1558.                            columns across the sheet set by /c. If it is less
  1559.                            than the total columns then any remaining columns
  1560.                            are in effect a right hand margin.
  1561.  
  1562.            /H[o|e]<num>[str]       Sets the specified header line for the
  1563.                            page. If /Ho is used then the header line is only
  1564.                            set for the odd numbered pages, and likewise /He
  1565.                            sets the header line for the even numbered pages
  1566.                            only.  See section 3.2.2 for more details.
  1567.  
  1568.            /F[o|e]<num>[str]       Sets the specified footer line for the
  1569.                            page. If /Fo is used then the footer line is only
  1570.                            set for the odd numbered pages, and likewise /Fe
  1571.                            sets the footer line for the even numbered pages
  1572.                            only.  See section 3.2.2 for more details.
  1573.  
  1574.            /O<file>        Specifies that the output should be sent to
  1575.                            <file> rather than to the standard output. This
  1576.                            is useful when used in a macro to send the output
  1577.                            direct to a printer, removing the need to
  1578.                            redirect the output on the command line.
  1579.  
  1580.            /t<num>         Sets the tab positions to be every <num> columns.
  1581.                            Default is 8.
  1582.  
  1583.            /d<char>        Document those comments that use the specified
  1584.                            character identifier. Multiple character
  1585.                            identifiers may be used if necessary. The default
  1586.                            is for no identifiers to be selected, so if you
  1587.                            find that nothing is being printed, make sure
  1588.                            that you have used the /d switch with the correct
  1589.                            identifies.
  1590.  
  1591.            /j              Treat multiple contiguous comments as being a
  1592.                            single comment. This is useful if a comment block
  1593.                            is made up of multiple single line comments.
  1594.  
  1595.            /s              Before printing the document sort the comment
  1596.                            blocks into alphabetical order using the keyword.
  1597.  
  1598.            /x              Do not include the start of the comment, ie. '/*'
  1599.                            or '//' and the following character identifier,
  1600.                            or the end of the comment.
  1601.  
  1602.            /x<char>        In addition to deleting the start and end of the
  1603.                            comment as in /x, delete all leading and trailing
  1604.                            occurrences of the specified character. This is
  1605.                            useful when a box has been drawn around the
  1606.                            comment.
  1607.  
  1608.  
  1609.  
  1610.  
  1611.  
  1612.  
  1613.  
  1614.                                    -24-
  1615.  
  1616.  
  1617.                
  1618.                            GNE C/C++ UTILITIES
  1619.  
  1620.  
  1621.    4.4.2   Feature Switches
  1622.  
  1623.            /bH             Prints the page header in bold.
  1624.  
  1625.            /bF             Prints the page footer in bold.
  1626.  
  1627.            /n              Starts each comment block on a new page.
  1628.  
  1629.            /nf             Starts each comment block on a new page if it
  1630.                            will not fit on the current page.  This is the
  1631.                            default.
  1632.  
  1633.            /np             Starts each comment block on a new page if the
  1634.                            next paragraph will not fit on the current page.
  1635.  
  1636.            /n<1-9>         Starts each comment block on a new page if the
  1637.                            specified number of lines will not fit on the
  1638.                            current page.
  1639.  
  1640.            /i              At the end of the source listing, print out an
  1641.                            index of the keywords against the page number
  1642.                            that the keyword was printed on.
  1643.  
  1644.            /q              Queries the number of pages required to print the
  1645.                            document, but does not print anything.
  1646.  
  1647.    4.4.3   Advanced Switches
  1648.  
  1649.            /o              Prints the odd numbered pages only.
  1650.  
  1651.            /e              Prints the even numbered pages only.
  1652.  
  1653.            /r              Prints the pages in reverse order.
  1654.  
  1655.            /X<num>         Sets the width of a page in 1/72". See sections
  1656.                            3.2.3 - 3.2.6 for more details.
  1657.  
  1658.            /Y<num>         Sets the height of a page in 1/72". See sections
  1659.                            3.2.3 - 3.2.6 for more details.
  1660.  
  1661.            /M<num>         Sets the un-printable margin around a page in
  1662.                            1/72". See sections 3.2.3 - 3.2.6 for more
  1663.                            details.
  1664.  
  1665.  
  1666.  
  1667.  
  1668.  
  1669.  
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.  
  1676.  
  1677.  
  1678.  
  1679.  
  1680.                                    -25-
  1681.  
  1682.  
  1683.                
  1684.                            GNE C/C++ UTILITIES
  1685.  
  1686.  
  1687.    4.4.4   Examples
  1688.  
  1689.            If each entry point to a library has a comment block of the form:
  1690.  
  1691.                    /*E
  1692.                    *** Function:    %FunctionName()
  1693.                    ***
  1694.                    *** Description:  Function description
  1695.                    ***
  1696.                    *** Parameters:   int $bParam1  Param description
  1697.                    ***
  1698.                    *** Return Value: void
  1699.                    **/
  1700.  
  1701.            and you wish to produce a document containing all of the entry
  1702.            points, sorted into alphabetical order, but without any of the
  1703.            "*" characters or the start and end of the comment lines, you
  1704.            would use the following switches:
  1705.  
  1706.            /dE /s /x*
  1707.  
  1708.            The above comment block when printed would appear as:
  1709.  
  1710.                     Function:     FunctionName()
  1711.  
  1712.                     Description:  Function description
  1713.  
  1714.                     Parameters:   int Param1  Param description
  1715.  
  1716.                     Return Value: void
  1717.  
  1718.  
  1719.  
  1720.  
  1721.  
  1722.  
  1723.  
  1724.  
  1725.  
  1726.  
  1727.  
  1728.  
  1729.  
  1730.  
  1731.  
  1732.  
  1733.  
  1734.  
  1735.  
  1736.  
  1737.  
  1738.  
  1739.  
  1740.  
  1741.  
  1742.  
  1743.  
  1744.  
  1745.  
  1746.                                    -26-
  1747.  
  1748.  
  1749.                
  1750.                            GNE C/C++ UTILITIES
  1751.  
  1752.  
  1753.    4.5     CPR  -  Source Printer
  1754.  
  1755.            CPR prints source code with support for double sided printing and
  1756.            multiple pages on each side of the paper. To assist finding
  1757.            function definitions, options exist to display function names in
  1758.            bold and to print an index giving the file name and page number
  1759.            for all function definitions.
  1760.  
  1761.    4.5.1   Basic Switches
  1762.  
  1763.            /p<a|e|l|p>     Sets the printer type. Set to one of the
  1764.                            following:
  1765.                            /pa - ASCII output
  1766.                            /pe - output suitable for an Epson printer.
  1767.                            /pl - output suitable for a LaserJet printer.
  1768.                            /pp - output suitable for a PostScript printer.
  1769.  
  1770.            /l<num>         Sets <num> lines to use on the sheet of paper.
  1771.                            This is the total number of lines including
  1772.                            header and footer lines.
  1773.  
  1774.            /c<num>         Sets <num> columns across the sheet of paper to
  1775.                            use.  This is the total number of columns
  1776.                            including left and right hand margins.
  1777.  
  1778.            /m[o|e]<num>    Sets the left hand margin to be <num> columns. If
  1779.                            /mo is used then the margin is set for odd
  1780.                            numbered pages only. If /me is used then the
  1781.                            margin is set for even numbered pages only.
  1782.  
  1783.            /u<num>         Sets the number of columns that data may be
  1784.                            printed in. This value plus the left hand margin
  1785.                            size must be less than or equal to the total
  1786.                            columns across the sheet set by /c. If it is less
  1787.                            than the total columns then any remaining columns
  1788.                            are in effect a right hand margin.
  1789.  
  1790.            /H[o|e]<num>[str]       Sets the specified header line for the
  1791.                            page. If /Ho is used then the header line is only
  1792.                            set for the odd numbered pages, and likewise /He
  1793.                            sets the header line for the even numbered pages
  1794.                            only.  See section 3.2.2 for more details.
  1795.  
  1796.            /F[o|e]<num>[str]       Sets the specified footer line for the
  1797.                            page. If /Fo is used then the footer line is only
  1798.                            set for the odd numbered pages, and likewise /Fe
  1799.                            sets the footer line for the even numbered pages
  1800.                            only.  See section 3.2.2 for more details.
  1801.  
  1802.            /O<file>        Specifies that the output should be sent to
  1803.                            <file> rather than to the standard output. This
  1804.                            is useful when used in a macro to send the output
  1805.                            direct to a printer, removing the need to
  1806.                            redirect the output on the command line.
  1807.  
  1808.  
  1809.  
  1810.  
  1811.  
  1812.                                    -27-
  1813.  
  1814.  
  1815.                
  1816.                            GNE C/C++ UTILITIES
  1817.  
  1818.  
  1819.            /n              Prints the line number at the start of each line
  1820.                            of source.
  1821.  
  1822.            /t<num>         Sets the tab positions to be every <num> columns.
  1823.                            Default is 8.
  1824.  
  1825.    4.5.2   Feature Switches
  1826.  
  1827.            /bc             Prints comments in bold.
  1828.  
  1829.            /bk             Prints all keywords in bold.
  1830.  
  1831.            /bK             Prints the keywords which affect the control of
  1832.                            flow in bold. Ie. the following keywords are
  1833.                            displayed in bold: 'goto', 'return', 'break',
  1834.                            'continue', 'if', 'else', 'for', 'do', 'while',
  1835.                            'switch', 'case' and 'default'.
  1836.  
  1837.            /bf             Prints the function names within function
  1838.                            definitions in bold.
  1839.  
  1840.            /bH             Prints the page header in bold.
  1841.  
  1842.            /bF             Prints the page footer in bold.
  1843.  
  1844.            /f<function>    Prints the specified function only. If there is a
  1845.                            comment immediately preceding the function then
  1846.                            this is considered to be part of the function and
  1847.                            is printed as well. Multiple /f switches may be
  1848.                            specified to print out more than one function at
  1849.                            a time.
  1850.  
  1851.            /i              At the end of the source listing, print out an
  1852.                            index of the functions containing the file and
  1853.                            page number where the function was defined.
  1854.  
  1855.            /j              If a line is too long to fit in the available
  1856.                            columns then continue it on the next line left
  1857.                            justified. The default is to continue it on the
  1858.                            next line right justified.
  1859.  
  1860.            /s              Start each function on a new page. If there is a
  1861.                            comment immediately preceding the function then
  1862.                            this is printed on the new page as well.
  1863.  
  1864.            /x              Ignore any form feed characters in the source.
  1865.                            The default is to start a new page when a form
  1866.                            feed character is encountered.
  1867.  
  1868.            /<1-9>          Specifies the number of pages to print on each
  1869.                            sheet of paper.  The pages are separated from
  1870.                            each other by two spaces. The default is to print
  1871.                            one page on each sheet of paper.
  1872.  
  1873.  
  1874.  
  1875.  
  1876.  
  1877.  
  1878.                                    -28-
  1879.  
  1880.  
  1881.                
  1882.                            GNE C/C++ UTILITIES
  1883.  
  1884.  
  1885.            /a              When printing multiple pages on each sheet of
  1886.                            paper, allow multiple files to be printed on the
  1887.                            same sheet (but in different pages). Default is
  1888.                            to start a new sheet regardless of how many pages
  1889.                            are unfilled on the current sheet.
  1890.  
  1891.            /L              Print in landscape mode (if supported by the
  1892.                            printer). Default is to print in portrait mode.
  1893.  
  1894.            /q              Queries the number of pages required to print the
  1895.                            source files, but does not print anything.
  1896.  
  1897.    4.5.3   Advanced Switches
  1898.  
  1899.            /o              Prints the odd numbered sheets only.
  1900.  
  1901.            /e              Prints the even numbered sheets only.
  1902.  
  1903.            /r              Prints the sheets in reverse order.
  1904.  
  1905.            /X<num>         Sets the width of a page in 1/72". See sections
  1906.                            3.2.3 - 3.2.6 for more details.
  1907.  
  1908.            /Y<num>         Sets the height of a page in 1/72". See sections
  1909.                            3.2.3 - 3.2.6 for more details.
  1910.  
  1911.            /M<num>         Sets the unprintable margin around a page in
  1912.                            1/72". See sections 3.2.3 - 3.2.6 for more
  1913.                            details.
  1914.  
  1915.    4.5.4   Examples
  1916.  
  1917.            To print a file TEST.C to a PostScript printer using 80 columns
  1918.            and 66 lines with a two line heading containing the file name,
  1919.            date and page number use:
  1920.  
  1921.                CPR /pp /c80 /l66 /H1{File}~{FDate}~{FPage} /H2 TEST.C
  1922.  
  1923.            To print the same file with two pages on each sheet of paper, the
  1924.            following switches would need to be added to the above command:
  1925.  
  1926.            /2              Specifies to print 2 pages on each sheet.
  1927.  
  1928.            /L              Print in landscape as this will give the text a
  1929.                            better aspect ratio than printing in portrait
  1930.                            orientation.
  1931.  
  1932.            /c162           Each page will need 80 columns and there is
  1933.                            always 2 empty columns between the pages.
  1934.  
  1935.            For further examples, see the CPR.MAC macro file which will
  1936.            contain examples appropriate to your printer.
  1937.  
  1938.  
  1939.  
  1940.  
  1941.  
  1942.  
  1943.  
  1944.                                    -29-
  1945.  
  1946.  
  1947.                
  1948.                            GNE C/C++ UTILITIES
  1949.  
  1950.  
  1951.    4.6     CPROTO  -  Function Prototype Generator
  1952.  
  1953.            CPROTO provides a quick way of producing function prototypes
  1954.            (which retain the original data types). Ability to process only
  1955.            static or global functions is also provided, as the prototypes
  1956.            for each are usually needed in different places.
  1957.  
  1958.            /d              Don't display the parameter names in the
  1959.                            prototype. The default is to display them.
  1960.  
  1961.            /g              Display the prototypes for global (non-static)
  1962.                            functions only. The default is to display
  1963.                            prototypes for all functions. See /s as well.
  1964.  
  1965.            /s              Display the prototypes for static functions only.
  1966.                            The default is to display prototypes for all
  1967.                            functions. See /g as well.
  1968.  
  1969.            /m              Display the prototypes for C++ member functions.
  1970.                            The default is not to display these. These would
  1971.                            need to be edited before being included in the
  1972.                            class.
  1973.  
  1974.    4.6.1   Examples
  1975.  
  1976.            To generate the prototypes of the static functions only, which
  1977.            you would probably want to include at the top of the source file,
  1978.            use the following switch:
  1979.  
  1980.            /s
  1981.  
  1982.            To generate the prototypes of the functions which are not static,
  1983.            which you would probably want to include in a header file, use
  1984.            the following switch:
  1985.  
  1986.            /g
  1987.  
  1988.  
  1989.  
  1990.  
  1991.  
  1992.  
  1993.  
  1994.  
  1995.  
  1996.  
  1997.  
  1998.  
  1999.  
  2000.  
  2001.  
  2002.  
  2003.  
  2004.  
  2005.  
  2006.  
  2007.  
  2008.  
  2009.  
  2010.                                    -30-
  2011.  
  2012.  
  2013.                
  2014.                            GNE C/C++ UTILITIES
  2015.  
  2016.  
  2017.    4.7     FINDDIV  -  Divide by Zero Finder
  2018.  
  2019.            Searches source files for all possible / and % operations. This
  2020.            makes it suitable for finding places where divide by zero errors
  2021.            could occur.
  2022.  
  2023.            Each line that contains a / or % operation is printed out
  2024.            preceded by the file name and the line number where the operation
  2025.            is located.
  2026.  
  2027.    4.7.1   Examples
  2028.  
  2029.            To find all locations where / and % operations occur in the C
  2030.            source files within the current directory, use:
  2031.  
  2032.                    finddiv *.c
  2033.  
  2034.            Finddiv would then print out each line that contained one of the
  2035.            two operators, along with its location. It is then a matter of
  2036.            checking each of these lines to see if it could perform a divide
  2037.            by zero.
  2038.  
  2039.  
  2040.  
  2041.  
  2042.  
  2043.  
  2044.  
  2045.  
  2046.  
  2047.  
  2048.  
  2049.  
  2050.  
  2051.  
  2052.  
  2053.  
  2054.  
  2055.  
  2056.  
  2057.  
  2058.  
  2059.  
  2060.  
  2061.  
  2062.  
  2063.  
  2064.  
  2065.  
  2066.  
  2067.  
  2068.  
  2069.  
  2070.  
  2071.  
  2072.  
  2073.  
  2074.  
  2075.  
  2076.                                    -31-
  2077.  
  2078.  
  2079.                
  2080.                            GNE C/C++ UTILITIES
  2081.  
  2082.  
  2083.    Appendix A  -  Error messages
  2084.  
  2085.            All error messages are preceded with a 6 character code. The
  2086.            first two characters are alphabetic and identify the application,
  2087.            and the last four which are all digits is the error code.
  2088.  
  2089.            The first two characters will be one of the following:
  2090.  
  2091.                    Code    Application
  2092.                    CB      CB
  2093.                    CC      CCALLS
  2094.                    CD      CDOC
  2095.                    CF      CDEF
  2096.                    CO      CPROTO
  2097.                    CP      CPR
  2098.                    FD      FINDDIV
  2099.  
  2100.            In the following list of error messages, a %s represents a string
  2101.            and %d represents a number which relate to the item in error.
  2102.            Each error message in the following list is preceded by its four
  2103.            digit error code.
  2104.  
  2105.    0100    Can't open file: %s
  2106.  
  2107.            The given filename which was specified as one of the arguments to
  2108.            the utility can't be opened.
  2109.  
  2110.    0101    Switch %s invalid
  2111.  
  2112.            The specified switch is invalid for this utility. Use /? to get a
  2113.            list of all valid switches for this utility.
  2114.  
  2115.    0102    Can't open output file: %s
  2116.  
  2117.            The filename which was specified with a /O switch can't be
  2118.            created. Either the filename is invalid or the file already
  2119.            exists and is write protected.
  2120.  
  2121.    0103    '%s' is an invalid option for the '%s' switch
  2122.  
  2123.            The given switch was not expecting the option it was given. Use
  2124.            /? to get a list of all valid switches and options for those
  2125.            switches.
  2126.  
  2127.    0105    Tab size must be between 1 and 64
  2128.  
  2129.            The tab size must be in the given range.
  2130.  
  2131.    0106    Number of printer columns must be between %d and %d
  2132.  
  2133.            The number of columns specified with the /c switch must be in the
  2134.            given range.
  2135.  
  2136.  
  2137.  
  2138.  
  2139.  
  2140.  
  2141.  
  2142.                                    -32-
  2143.  
  2144.  
  2145.                
  2146.                            GNE C/C++ UTILITIES
  2147.  
  2148.  
  2149.    0107    Number of usable columns must be between %d and %d
  2150.  
  2151.            The number of columns specified with the /u switch must be in the
  2152.            given range.
  2153.  
  2154.    0108    Number of lines must be between %d and %d
  2155.  
  2156.            The number of lines specified with the /l switch must be in the
  2157.            given range.
  2158.  
  2159.    0109    Left margin size must be between %d and %d
  2160.  
  2161.            The left margin size specified with the /m switch must be in the
  2162.            given range.
  2163.  
  2164.    0110    Left margin size for odd pages must be between %d and %d
  2165.  
  2166.            The left margin size specified with the /mo switch must be in the
  2167.            given range.
  2168.  
  2169.    0111    Left margin size for even pages must be between %d and %d
  2170.  
  2171.            The left margin size specified with the /me switch must be in the
  2172.            given range.
  2173.  
  2174.    0112    Sum of header and footer lines must be < number of lines
  2175.  
  2176.            The total number of header and footer lines specified with the /H
  2177.            and /F switches must be less than the total number of lines per
  2178.            page specified with the /l switch.
  2179.  
  2180.    0113    Page margin must be between %d and %d
  2181.  
  2182.            The page margin size specified with the /M switch must be in the
  2183.            given range.
  2184.  
  2185.    0114    Can't open macro file %s
  2186.  
  2187.            The specified macro file could not be opened. The utilities
  2188.            expect to find their macro files within the directory specified
  2189.            in the GNEUTILS environment variable. Check that this is
  2190.            correctly set up in your AUTOEXEC.BAT file.
  2191.  
  2192.    0115    Can't find macro %s
  2193.  
  2194.            The macro you specified as a parameter (proceeded with a '+')
  2195.            can't be found in the macro file for the utility. Check that you
  2196.            have spelt the macro name correctly. Note that the case of the
  2197.            macro is not significant.
  2198.  
  2199.    0116    Page width too small
  2200.  
  2201.            The page width specified with the /X switch is too small.
  2202.  
  2203.  
  2204.  
  2205.  
  2206.  
  2207.  
  2208.                                    -33-
  2209.  
  2210.  
  2211.                
  2212.                            GNE C/C++ UTILITIES
  2213.  
  2214.  
  2215.    0117    Page height too small
  2216.  
  2217.            The page height specified with the /Y switch is too small.
  2218.  
  2219.    0118    Comment end column must be between %d and %d
  2220.  
  2221.            The comment end column specified with the /c switch must be in
  2222.            the given range.
  2223.  
  2224.    0119    Indentation size must be between %d and %d
  2225.  
  2226.            The indentation size specified with the /i switch must be in the
  2227.            given range.
  2228.  
  2229.    0120    %s is an invalid indentation style
  2230.  
  2231.            The indentation style specified with the /i switch is invalid.
  2232.            Use the /? switch to see valid indentation styles.
  2233.  
  2234.    0121    Source tab size must be between %d and %d.
  2235.  
  2236.            The tab size specified with the /T switch must be in the given
  2237.            range.
  2238.  
  2239.    0200    Insufficient memory
  2240.  
  2241.            There is insufficient memory to run the utility. This should not
  2242.            happen on a 'normal' system. Check to see what else is already
  2243.            loaded into memory.
  2244.  
  2245.    0201    Insufficient memory to read ahead %d tokens
  2246.  
  2247.            If the number of tokens specified is large (greater than 100),
  2248.            then check too see if you are trying to process a non C/C++
  2249.            source file.  When using CPR avoid using the /bf, /p and /f
  2250.            switches with non C/C++ source files. If the number of tokens
  2251.            specified is small, then check to see what else is already loaded
  2252.            into memory.
  2253.  
  2254.    0202    Insufficient string space
  2255.  
  2256.            The number of strings exceeded the size of the string table. Use
  2257.            the /S switch to increase the size of the string table.
  2258.  
  2259.    0300    Aborted by user
  2260.  
  2261.            The program was aborted by pressing either <Ctrl>+C or
  2262.            <Ctrl>+<Break>.
  2263.  
  2264.    0400    Write failed
  2265.  
  2266.            A write operation failed.  Check there is sufficient disk space,
  2267.            or that the printer is on-line etc.
  2268.  
  2269.  
  2270.  
  2271.  
  2272.  
  2273.  
  2274.                                    -34-
  2275.  
  2276.  
  2277.                
  2278.                            GNE C/C++ UTILITIES
  2279.  
  2280.  
  2281.    0500    Can't create temporary file %s
  2282.  
  2283.            An attempt to create the specified directory name failed.
  2284.            Temporary files are created in the directory specified by the TMP
  2285.            environment variable. If the TMP environment variable is not set
  2286.            then TEMP is used. If this is not set, then they are created in
  2287.            the current directory.
  2288.  
  2289.    0600    Switch '%s' encountered
  2290.  
  2291.            The specified switch is unavailable for use in your version of
  2292.            the utility.
  2293.  
  2294.    0700    Too many blocks
  2295.  
  2296.            CDOC can only process a maximum of 512 comment blocks.
  2297.  
  2298.    0701    Too many defines
  2299.  
  2300.            CDEF can only process a maximum of 40 defines/un-defines at a
  2301.            time. If you need more then use multiple passes using up to 40
  2302.            defines each time.
  2303.  
  2304.    0702    Too many functions
  2305.  
  2306.            The number of functions in the source exceeded the size of the
  2307.            function table. Use the /F switch to increase the size of the
  2308.            table.
  2309.  
  2310.    0703    Too many calls
  2311.  
  2312.            The number of function calls in the source exceeded the size of
  2313.            the function call table.  Use the /C switch to increase the size
  2314.            of the table.
  2315.  
  2316.    0800    Too many levels of #if/#ifdef/#ifndef in %s at line %d
  2317.  
  2318.            CDEF will only allow up to 40 nested levels of pre-processor
  2319.            statements.
  2320.  
  2321.    0801    #elif without matching #if in %s at line %d
  2322.  
  2323.            Check that the source you are processing is correct.
  2324.  
  2325.    0802    #else without matching #if in %s at line %d
  2326.  
  2327.            Check that the source you are processing is correct.
  2328.  
  2329.    0803    #endif without matching #if in %s at line %d
  2330.  
  2331.            Check that the source you are processing is correct.
  2332.  
  2333.    0804    Output line too long in %s at line %d
  2334.  
  2335.            The source line after pre-processing by CDEF is longer than 256
  2336.            characters.
  2337.  
  2338.  
  2339.  
  2340.                                    -35-
  2341.  
  2342.  
  2343.                
  2344.                            GNE C/C++ UTILITIES
  2345.  
  2346.  
  2347.  
  2348.    0805    Non pre-processor token in %s at line %d
  2349.  
  2350.            Check that the specified line of source is correct.
  2351.  
  2352.    0806    Unexpected operand in %s at line %d
  2353.  
  2354.            Check that the specified line of source is correct.
  2355.  
  2356.    0807    Expression too complex in %s at line %d
  2357.  
  2358.            Try to simplify the expression on the specified line.
  2359.  
  2360.    0808    Unexpected operator in %s at line %d
  2361.  
  2362.            Check that the specified line of source is correct.
  2363.  
  2364.    0809    Unexpected ( in %s at line %d
  2365.  
  2366.            Check that the specified line of source is correct.
  2367.  
  2368.    0810    Matching ( not found in %s at line %d
  2369.  
  2370.            A ')' was found for which there wasn't a matching '('.
  2371.  
  2372.    0811    Unexpected ) in %s at line %d
  2373.  
  2374.            Check that the specified line of source is correct.
  2375.  
  2376.    0812    Unmatched ( in %s at line %d
  2377.  
  2378.            A '(' was found for which there wasn't a matching ')'.
  2379.  
  2380.    0813    Invalid argument for defined operator in %s at line %d
  2381.  
  2382.            The defined() operator was given an invalid parameter.
  2383.  
  2384.    0814    Divide by zero in %s at line %d
  2385.  
  2386.            The expression involves performing a divide by zero.
  2387.  
  2388.  
  2389.  
  2390.  
  2391.  
  2392.  
  2393.  
  2394.  
  2395.  
  2396.  
  2397.  
  2398.  
  2399.  
  2400.  
  2401.  
  2402.  
  2403.  
  2404.  
  2405.  
  2406.                                    -36-
  2407.